package Class.Homemade.damo0523.demo3;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 姚东名
 * Date: 2024-05-23
 * Time: 22:52
 */
/*抽象类
    1.抽象方法：这个方法可以没有具体的实现
    2.如果一个类当中 有抽象方法，那么这个类 必须是抽象类，不然会报错
    3.抽象类与普通类的区别在于 抽象类中可以包含抽象方法 也可以包含普通方法，也可以没有抽象方法
    4.如果一个普通类 继承了这个抽象方法，那么此时这个普通类 就必须重写这个抽象类当中的 抽象方法
     */

//抽象类的出现，就是为了被继承，多了一层编译器的校验 - 一个关键字：abstract

public abstract class Shape {//2.如果一个类当中 有抽象方法，那么这个类 必须是抽象类，不然会报错
    /*public void draw() {
        System.out.println("画一个图形");
    }*/

    //1.抽象方法：这个方法可以没有具体的实现
    public abstract void draw();
}
//可以无限套娃
//方式一：
abstract class A extends Shape {
    abstract void test();
}
//方式二：
class B extends Shape {
    @Override
    public void draw() {

    }
}

//4.如果一个普通类 继承了这个抽象方法，那么此时这个普通类 就必须重写这个抽象类当中的 抽象方法
class C extends A {
    //不仅要对父类的抽象方法进行重写，也要对子类的父类的父类抽象方法进行重写
    @Override
    void test() {

    }
    @Override
    public void draw() {

    }
}
